React ๋์์ฑ ์ค์ผ์ค๋ง์ ๋ํ ์ฌ์ธต ๋ถ์. ์ฐ์ ์์ ๋ ์ธ, ์ค๋จ ์ฒ๋ฆฌ, ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ์ ํ๊ตฌํฉ๋๋ค. ์ด ๊ฐ๋ ฅํ React ๊ธฐ๋ฅ์ผ๋ก ๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ UI๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ธ์.
React ๋์์ฑ ์ค์ผ์ค๋ง: ์ฐ์ ์์ ๋ ์ธ๊ณผ ์ค๋จ ์ฒ๋ฆฌ ๋ง์คํฐํ๊ธฐ
React 18 ์ด์์ ํต์ฌ ๊ธฐ๋ฅ์ธ React ๋์์ฑ ์ค์ผ์ค๋ง์ React ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๋ฐ์ดํธ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ ๋๋งํ๋ ๋ฐฉ์์ ์์ด ํจ๋ฌ๋ค์์ ์ ํ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ํนํ ์ฅ๊ธฐ ์คํ ์์ ์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํดํ ์ ์๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ ๋ฐ์์ฑ ์๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ ์ฌ๋ ฅ์ ์ด์ด์ค๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ๋์์ฑ ์ค์ผ์ค๋ง์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด ์ฐ์ ์์ ๋ ์ธ, ์ค๋จ ์ฒ๋ฆฌ ๋ฐ React ์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํ๋ฅผ ์ํ ์ค์ฉ์ ์ธ ์ ๋ต์ ํ๊ตฌํฉ๋๋ค.
React ๋์์ฑ ์ค์ผ์ค๋ง ์ดํดํ๊ธฐ
๋์์ฑ ์ค์ผ์ค๋ง ์ด์ ์๋ React๊ฐ ์ฃผ๋ก ๋๊ธฐ ๋ฐฉ์์ผ๋ก ์๋ํ์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ฉด React๋ ์ฆ์ ์ฌ์กฐ์ ํ๋ก์ธ์ค๋ฅผ ์์ํ์ฌ ์ ์ฌ์ ์ผ๋ก ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์๋ตํ๋ ๊ฒ์ ๋ง์์ต๋๋ค. ์ด๋ก ์ธํด ๋์ ๋๋ ์ง์ฐ๊ณผ ๋ฒ๋ฒ ์ด๋ UI๊ฐ ๋ฐ์ํ ์ ์์์ต๋๋ค.
๋์์ฑ ์ค์ผ์ค๋ง์ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ๋์ ํฉ๋๋ค. ์ด์ React๋ ๋ ๋๋ง ์์ ์ ๋ ์๊ณ ์ค๋จ ๊ฐ๋ฅํ ๋จ์๋ก ๋ถํ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด React๋ ์ฐ์ ์์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ต์ฑ ์๊ตฌ์ ๋ฐ๋ผ ๋ ๋๋ง ์์ ์ ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ํฌ๊ธฐํ ์ ์์ต๋๋ค. ์ด๋ UI ์ ๋ฐ์ดํธ๋ฅผ ์ํ ๊ณ ํจ์จ ์์ ๊ด๋ฆฌ์๋ฅผ ๊ฐ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
ํต์ฌ ๊ฐ๋ :
- ๋์์ฑ ๋ชจ๋(Concurrent Mode): ๋์์ฑ ๋ ๋๋ง์ ๊ฐ๋ฅํ๊ฒ ํ๋ React์ ๊ธฐ๋ฅ ๋ชจ์์ ํฌ๊ดํ๋ ์ฉ์ด์ ๋๋ค.
- ์ฐ์ ์์ ๋ ์ธ(Priority Lanes): ๋ค์ํ ์ ํ์ ์ ๋ฐ์ดํธ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฐ์ ์์๋ฅผ ํ ๋นํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง(Interruptible Rendering): React๋ ๋ ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ ๋๋ง ์์ ์ ์ผ์ ์ค์งํ๊ณ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
- Suspense: ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ์ ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
- ํธ๋์ง์ (Transitions): ํน์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๊ธด๊ธํ์ง ์์ ๊ฒ์ผ๋ก ํ์ํ์ฌ React๊ฐ ๋ ์ค์ํ ์ํธ์์ฉ์ ์ฐ์ ์ฒ๋ฆฌํ๋๋ก ํ์ฉํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ฐ์ ์์ ๋ ์ธ: ์ ๋ฐ์ดํธ ๊ธด๊ธ์ฑ ๊ด๋ฆฌ
์ฐ์ ์์ ๋ ์ธ์ ๋์์ฑ ์ค์ผ์ค๋ง์ ํต์ฌ์ ๋๋ค. ์ด๋ ์ ๋ฐ์ดํธ์ ์ค์์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฏธ์น๋ ์ํฅ์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ๋ฅผ ๋ถ๋ฅํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด React๋ ์ด๋ฌํ ์ฐ์ ์์๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ค ์ ๋ฐ์ดํธ๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ ์ง์ ์ผ๋ง๋ ์ ๊ทน์ ์ผ๋ก ๋ ๋๋งํ ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
์ด๋ฅผ ๋ค์ํ ์ข ๋ฅ์ ๊ตํต์ ์ํ ์ฐจ์ ์ด ์๋ ๊ณ ์๋๋ก์ฒ๋ผ ์๊ฐํ ์ ์์ต๋๋ค. ๊ธด๊ธ ์ฐจ๋(๋์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ)์ ๊ฐ์ฅ ๋น ๋ฅธ ์ฐจ์ ์ ์ป๊ณ , ๋๋ฆฐ ๊ตํต(๋ฎ์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ)์ ๋ค๋ฅธ ์ฐจ์ ์ ์ฐจ์งํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์ฐ์ ์์ ์์ค:
- ์ฆ์ ์ฐ์ ์์(Immediate Priority): ์ฌ์ฉ์ ์ ๋ ฅ ์ด๋ฒคํธ(์: ํ ์คํธ ํ๋์ ์ ๋ ฅ)์ ๊ฐ์ด ์ฆ์ ์ฒ๋ฆฌํด์ผ ํ๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
- ์ฌ์ฉ์ ์ฐจ๋จ ์ฐ์ ์์(User-Blocking Priority): ์ฌ์ฉ์๊ฐ UI์ ์ํธ์์ฉํ๋ ๊ฒ์ ์ฐจ๋จํ๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
- ๋ณดํต ์ฐ์ ์์(Normal Priority): ๋๋ถ๋ถ์ ์ ๋ฐ์ดํธ์ ๋ํ ๊ธฐ๋ณธ ์ฐ์ ์์์ ๋๋ค.
- ๋ฎ์ ์ฐ์ ์์(Low Priority): ์ฌ์ฉ์ ๊ฒฝํ์ ์ค์ํ์ง ์์ผ๋ฉฐ ์ง์ฐ๋ ์ ์๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
- ์ ํด ์ฐ์ ์์(Idle Priority): ๋ธ๋ผ์ฐ์ ๊ฐ ์ ํด ์ํ์ผ ๋ ์ํ๋ ์ ์๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
๋ชจ๋ ์ ๋ฐ์ดํธ์ ๋ํด ์ฐ์ ์์ ์์ค์ ์ง์ ์ง์ ํ ์๋ ์์ง๋ง, React๋ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ ์ปจํ ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ ์์๋ฅผ ์ถ๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฒคํธ ํธ๋ค๋ฌ(์: `onClick`, `onChange`)์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ ์ผ๋ฐ์ ์ผ๋ก `setTimeout` ๋๋ `setInterval`์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ณด๋ค ๋์ ์ฐ์ ์์๊ฐ ํ ๋น๋ฉ๋๋ค.
๋ฎ์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ์ ํธ๋์ง์ ์ฌ์ฉํ๊ธฐ
`useTransition` ํ ์ ํน์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฎ์ ์ฐ์ ์์๋ก ๋ช ์์ ์ผ๋ก ํ์ํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ์ ๋๋ฉ์ด์ , UI ํธ๋์ง์ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ถ์ ์ ์ธ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ง์ฐ๋ ์ ์๋ ๊ธฐํ ๊ธด๊ธํ์ง ์์ ์ ๋ฐ์ดํธ์ ํนํ ์ ์ฉํฉ๋๋ค.
๋ค์์ ์์์ ๋๋ค:
import { useState, useTransition } from 'react';
function MyComponent() {
const [isPending, startTransition] = useTransition();
const [text, setText] = useState('');
const handleChange = (e) => {
startTransition(() => {
setText(e.target.value);
});
};
return (
{isPending ? ์
๋ฐ์ดํธ ์ค...
: ํ
์คํธ: {text}
}
);
}
์ด ์์ ์์ `setText` ์ ๋ฐ์ดํธ๋ `startTransition`์ผ๋ก ๊ฐ์ธ์ ธ ์์ต๋๋ค. ์ด๋ React์๊ฒ ์ด ์ ๋ฐ์ดํธ๋ฅผ ๋ฎ์ ์ฐ์ ์์๋ก ์ฒ๋ฆฌํ๋๋ก ์ง์ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ์ ๊ฒฝ์ฐ, React๋ ๋ฉ์ธ ์ค๋ ๋ ์ฐจ๋จ์ ํผํ๊ธฐ ์ํด ์ ๋ฐ์ดํธ๋ฅผ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค. `isPending` ํ๋๊ทธ๋ ์ฌ์ฉ์์๊ฒ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค๋จ ์ฒ๋ฆฌ: ์ฌ์ฉ์ ์ํธ์์ฉ์ ์๋ตํ๊ธฐ
๋์์ฑ ์ค์ผ์ค๋ง์ ์ฃผ์ ์ด์ ์ค ํ๋๋ ๋ ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ์ ๋ ์ฅ๊ธฐ ์คํ ๋ ๋๋ง ์์ ์ ์ค๋จํ ์ ์๋ ๋ฅ๋ ฅ์ ๋๋ค. ์ด๋ ๋ณต์กํ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋ ์ค์๋ UI๊ฐ ์ฌ์ฉ์ ์ํธ์์ฉ์ ๊ณ์ ๋ฐ์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
ํฐ ํญ๋ชฉ ๋ชฉ๋ก์ ๋ ๋๋งํ๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์ธ์. ์ฌ์ฉ์๊ฐ ๋ชฉ๋ก์ ์คํฌ๋กคํ๋ฉด React๋ ๋ณด์ด๋ ํญ๋ชฉ์ ํ์ํ๊ธฐ ์ํด UI๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค. ๋์์ฑ ์ค์ผ์ค๋ง์ด ์๋ค๋ฉด ์ ์ฒด ๋ชฉ๋ก์ ๋ ๋๋งํ๋ ๊ฒ์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ์คํฌ๋กค์ด ๋ฒ๋ฒ ์ด๋ ๋๋์ ์ค ์ ์์ต๋๋ค. ๋์์ฑ ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๋ฉด React๋ ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ๋ ๋ชฉ๋ก ๋ ๋๋ง์ ์ค๋จํ๊ณ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ์ฌ ๋ถ๋๋ฌ์ด ์คํฌ๋กค ๊ฒฝํ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์ค๋จ ์๋ ๋ฐฉ์:
- React๊ฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋ ๋๋ง์ ์์ํฉ๋๋ค.
- ๋ ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ(์: ์ฌ์ฉ์ ํด๋ฆญ ๋๋ ํค ์ ๋ ฅ)๊ฐ ๋ฐ์ํ๋ฉด React๋ ํ์ฌ ๋ ๋๋ง ์์ ์ ์ผ์ ์ค์งํฉ๋๋ค.
- React๊ฐ ๋ ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ๊ฐ ์๋ฃ๋๋ฉด React๋ ์ค๋จ๋ ๋ ๋๋ง ์์ ์ ์ฌ๊ฐํ๊ฑฐ๋, ์ค๋จ๋ ์์ ์ด ๋ ์ด์ ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ ์์ ํ ํฌ๊ธฐํ ์ ์์ต๋๋ค.
์ด ์ค๋จ ๋ฉ์ปค๋์ฆ์ ํตํด React๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ์๊ตฌ์ ๋ฐ๋ผ ๋ ๋๋ง ์ ๋ต์ ๋์ ์ผ๋ก ์กฐ์ ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋ถ๋๋ฝ๊ณ ๋ฐ์์ ์ผ๋ก ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
Suspense: ์ ์ธ์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ๋ก๋ฉ ์ํ
Suspense๋ ๋์์ฑ ์ค์ผ์ค๋ง๊ณผ ์ํํ๊ฒ ์๋ํ๋ ๋ ๋ค๋ฅธ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ์ ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. Suspense๋ ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๋ ๋์ ๋์ฒด ์ฝํ ์ธ ๋ฅผ ํ์ํ ์ ์๊ฒ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
์ ํต์ ์ผ๋ก React์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ ๋ก๋ฉ ์ํ์ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํด์ผ ํ์ต๋๋ค. ์ด๋ก ์ธํด ์ข ์ข ๋ณต์กํ๊ณ ์ฅํฉํ ์ฝ๋๊ฐ ๋ฐ์ํ์ต๋๋ค. Suspense๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ์ ์์กดํ๋ ์ปดํฌ๋ํธ๋ฅผ `Suspense` ๊ฒฝ๊ณ๋ก ๊ฐ์ธ๋ ๋ฐฉ์์ผ๋ก ์ด ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๋ ๋์ ํ์๋ ๋์ฒด ์ปดํฌ๋ํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
๊ฐ์์ `fetchData` ํจ์๋ฅผ ์ฌ์ฉํ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
import { Suspense } from 'react';
function MyComponent() {
const data = fetchData(); // Promise๋ฅผ ๋์ง ์ ์์
return (
{data.title}
{data.description}
);
}
function App() {
return (
๋ก๋ฉ ์ค...}>
);
}
์ด ์์ ์์ `fetchData`๊ฐ Promise(๋ฐ์ดํฐ๊ฐ ์์ง ์ฌ์ฉ ๊ฐ๋ฅํ์ง ์์์ ๋ํ๋)๋ฅผ ๋ฐํํ๋ฉด React๋ `MyComponent`์ ๋ ๋๋ง์ ์ผ์ ์ค๋จํ๊ณ Promise๊ฐ ํด๊ฒฐ๋ ๋๊น์ง ๋์ฒด ์ปดํฌ๋ํธ(`
๋ก๋ฉ ์ค...
`)๋ฅผ ํ์ํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ฉด React๋ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ก `MyComponent`์ ๋ ๋๋ง์ ์ฌ๊ฐํฉ๋๋ค.Suspense๋ ๋์์ฑ ์ค์ผ์ค๋ง๊ณผ ํนํ ์ ์๋ํฉ๋๋ค. ์ปดํฌ๋ํธ๊ฐ ์ผ์ ์ค๋จ๋๋ฉด React๋ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ ์ ๋ฉ์ถ๊ณ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด React๋ ๋ฐ์ดํฐ ๋ก๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋ ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ฒ๋ฆฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ๋ฐ์์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋์์ฑ ์ค์ผ์ค๋ง์ผ๋ก React ์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํํ๊ธฐ
๋์์ฑ ์ค์ผ์ค๋ง์ ์ด์ ์ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด React ์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ฃผ์ ์ต์ ํ ์ ๋ต:
- ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ์ต์ํ: `React.memo`, `useMemo`, `useCallback`์ ์ฌ์ฉํ์ฌ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ ๊ฒ์ ๋ฐฉ์งํ์ธ์. ํนํ ๋ณต์กํ ์ํ์ ๊ฒฝ์ฐ ๋ถ๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
- ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ์ต์ ํ: ์บ์ฑ ๋ฐ ํ์ด์ง๋ค์ด์ ๊ณผ ๊ฐ์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ค๊ณ ๋ ๋๋งํด์ผ ํ๋ ๋ฐ์ดํฐ์ ์์ ์ค์ด์ธ์. `swr` ๋ฐ `react-query`์ ๊ฐ์ ๋๊ตฌ๋ ์ด ๊ณผ์ ์ ํฌ๊ฒ ๋จ์ํํ ์ ์์ต๋๋ค.
- ํฐ ์ปดํฌ๋ํธ ๋ถํ : ํฌ๊ณ ๋ณต์กํ ์ปดํฌ๋ํธ๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ปดํฌ๋ํธ๋ก ๋ถํดํ์ธ์. ์ด๋ ๋ ๋๋ง ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
- CPU ์ง์ฝ์ ์์ ์ ์น ์์ปค ์ฌ์ฉ: ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ ๋ณต์กํ ๊ณ์ฐ๊ณผ ๊ฐ์ CPU ์ง์ฝ์ ์ธ ์์ ์ ์น ์์ปค๋ก ์คํ๋ก๋ํ์ฌ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ์ธ์.
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง: React Profiler๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์๊ณผ ์ต์ ํ ์์ญ์ ์๋ณํ์ธ์. ์ฝ๋๊ฐ ๋ ๋๋ง ์ฃผ๊ธฐ์ ๋ฏธ์น๋ ์ํฅ์ ์ดํดํ์ธ์.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋๋ฐ์ด์ค ๋ฐ ์ค๋กํ: ๊ณผ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์คํ๋๋ ์๋๋ฅผ ์ ํํ์ธ์. ์๋ฅผ ๋ค์ด, ๊ฒ์ ์ ๋ ฅ๋์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ ์ ํ์ดํ์ ๋ฉ์ถ ํ์๋ง ๊ฒ์์ ํธ๋ฆฌ๊ฑฐํ๊ณ ์ถ์ ์ ์์ต๋๋ค.
๊ตญ์ ํ ๊ณ ๋ ค์ฌํญ:
- ์ง์ญํ(l10n): ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ธ์ด์ ๋ฌธํ์ ๋งฅ๋ฝ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋ณด์ฅํ์ธ์. ๊ตญ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: `i18next`)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ์ญ์ ๊ด๋ฆฌํ๊ณ UI๋ฅผ ๋ค๋ฅธ ๋ก์ผ์ผ์ ๋ง๊ฒ ์กฐ์ ํ์ธ์.
- ๋ ์ง ๋ฐ ์๊ฐ ํ์: ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ์ ์ ํ ๋ ์ง ๋ฐ ์๊ฐ ํ์์ ์ฌ์ฉํ์ธ์. `date-fns`๋ `moment.js`(ํฌ๊ธฐ์ ์ง์ ์ค๋จ์ผ๋ก ์ธํด ๋์ ๊ณ ๋ ค)์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ซ์ ๋ฐ ํตํ ํ์: ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ์ซ์์ ํตํ ํ์์ ์ง์ ํ์ธ์.
- ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ(RTL) ๋ ์ด์์: RTL ๋ ์ด์์ ๋ณํ์ ์ฒ๋ฆฌํ๋ CSS ๋ ผ๋ฆฌ์ ์์ฑ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ด, ํ๋ธ๋ฆฌ์ด์ ๊ฐ์ RTL ์ธ์ด๋ฅผ ์ง์ํ์ธ์.
- ์ ๊ทผ์ฑ(a11y): ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ฅด๊ณ ARIA ์์ฑ์ ์ฌ์ฉํ์ฌ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผํ ์ ์๋๋ก ๋ณด์ฅํ์ธ์.
์ค์ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
๋์์ฑ ์ค์ผ์ค๋ง์ด React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ด๋ป๊ฒ ์ ์ฉ๋ ์ ์๋์ง ์ค์ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ๋ณต์กํ ๋ฐ์ดํฐ ์๊ฐํ
์ฐจํธ ๋ฐ ๊ทธ๋ํ์ ๊ฐ์ ๋ณต์กํ ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ํ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๋ง์ ์์ ์์๋ฅผ ๋ ๋๋งํด์ผ ํฉ๋๋ค. ๋์์ฑ ์ค์ผ์ค๋ง ์์ด๋ ์ด๋ฌํ ์๊ฐํ๋ฅผ ๋ ๋๋งํ๋ ๊ฒ์ด ๋๋ฆฌ๊ณ ๋ฐ์์ด ์์ ์ ์์ต๋๋ค. ๋์์ฑ ์ค์ผ์ค๋ง๊ณผ ๊ฐ์ํ(์๊ฐํ์ ๋ณด์ด๋ ๋ถ๋ถ๋ง ๋ ๋๋ง) ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ๋ฐ์์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์์ 2: ์ค์๊ฐ ๋ฐ์ดํฐ ๋์๋ณด๋
์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ํ์ํ๋ ์ค์๊ฐ ๋ฐ์ดํฐ ๋์๋ณด๋๋ ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋งค์ฐ ๋์ ๋ฐ์์ฑ์ ๋ณด์ฌ์ผ ํฉ๋๋ค. ๋์์ฑ ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ณด๋ค ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฐ์ ์ํ์ฌ ์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ ์ค์๋ ๋์๋ณด๋๊ฐ ์ํธ์์ฉ์ฑ์ ์ ์งํ๋๋ก ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๋ฅผ ๋ถ๋๋ฝ๊ฒ ํ๊ธฐ ์ํด ํธ๋์ง์ ์ ์ฌ์ฉํ๋ ๊ฒ๋ ๋์์ด ๋ฉ๋๋ค.
์์ 3: ๋ณต์กํ ํํฐ๋ง ๊ธฐ๋ฅ์ด ์๋ ์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ๋ณต์กํ ํํฐ๋ง ๋ฐ ์ ๋ ฌ ์์ ์ ํฌํจํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํํฐ๋ฅผ ์ ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํ ๋ชฉ๋ก์ ๋ค์ ๋ ๋๋งํด์ผ ํฉ๋๋ค. ๋์์ฑ ์ค์ผ์ค๋ง์ ์ฌ์ฉํ๋ฉด ์ ํ ๋ชฉ๋ก์ ๋ฆฌ๋ ๋๋ง์ ๋ฎ์ ์ฐ์ ์์ ์์ ์ผ๋ก ํ์ํ์ฌ ํํฐ๋ง์ด ์ํ๋๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์ ์ํธ์์ฉ์ ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ํ ์ ์์ต๋๋ค. ํํฐ๋ง ๊ณผ์ ๋์ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
์์ 4: ํ์ ๋ฌธ์ ํธ์ง๊ธฐ
ํ์ ๋ฌธ์ ํธ์ง๊ธฐ๋ ์ฌ๋ฌ ์ฌ์ฉ์์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์์ ์ผ๋ก ๋๊ธฐํํ๊ณ ๋ ๋๋งํด์ผ ํฉ๋๋ค. ๋์์ฑ ์ค์ผ์ค๋ง์ ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฐ์ ์ํ๋ฉฐ ์ฌ๋ฌ ๋์ ์ฌ์ฉ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ถ๋๋ฌ์ด ํธ์ง ๊ฒฝํ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋๊ด์ ์ ๋ฐ์ดํธ๋ ์ฒด๊ฐ ๋ฐ์์ฑ์ ๋์ฑ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ฒฐ๋ก : ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํ ๋์์ฑ ์ค์ผ์ค๋ง์ ์์ฉ
React ๋์์ฑ ์ค์ผ์ค๋ง์ ๋ ๋ฐ์์ฑ ์๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ฐ์ ์์ ๋ ์ธ, ์ค๋จ ์ฒ๋ฆฌ, Suspense ๋ฐ ํธ๋์ง์ ์ ๊ฐ๋ ์ ์ดํดํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ์ฌ ๋ ๋ถ๋๋ฝ๊ณ ๋งค๋ ฅ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. React๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ๋์์ฑ ์ค์ผ์ค๋ง์ ์์ฌํ ์ฌ์ง ์์ด React ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ์ ๋ ์ค์ํ ๋ถ๋ถ์ด ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์์ฉํจ์ผ๋ก์จ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ฆ๊ฒ๊ฒ ํ๋ ์ธ๊ณ์ ์์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋์์ฑ ์ค์ผ์ค๋ง์ด ์ ๊ณตํ๋ ๊ฐ๋ฅ์ฑ์ ์คํํ๊ณ ํ์ํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋กํ์ผ๋งํ๊ณ , ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ , ์ต์ ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๊ฐ์ ํ์ธ์. ์ง์์ ์ผ๋ก ๋ฐฐ์ฐ๊ณ ๊ธฐ์ ์ ์ฐ๋งํจ์ผ๋ก์จ React ๋์์ฑ ์ค์ผ์ค๋ง์ ๋ง์คํฐ๊ฐ ๋์ด ์ง์ ์ผ๋ก ๋ฐ์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.